﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Configuration;
using Entidades.Catalogo;
using System.Data;
using Entidades.Solicitud;
using Persistencia.Solicitud;

namespace Persistencia.Catalogo
{
    public class PerSolicitud : Persistencia.General.IPersistencia
    {
        #region Propiedades Out

        public int CveSolicitud
        {
            get;
            set;
        }

        #endregion

        #region Miembros de IPersistencia

        public void Insertar(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PKG_SOLICITUD.insertSolicitud", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro0 = new OracleParameter();
                parametro0.OracleDbType = OracleDbType.Int32;
                parametro0.Direction = ParameterDirection.Output;
                comando.Parameters.Add(parametro0);

                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = string.Empty;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Varchar2;
                parametro2.Value = (((EntSolicitud)entidad).FechaOficio == string.Empty) ? null : ((EntSolicitud)entidad).FechaOficio; 
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);

                OracleParameter parametro3 = new OracleParameter();
                parametro3.OracleDbType = OracleDbType.Varchar2;
                parametro3.Value = (((EntSolicitud)entidad).NoOficio == string.Empty) ? null : ((EntSolicitud)entidad).NoOficio;
                parametro3.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro3);

                OracleParameter parametro4 = new OracleParameter();
                parametro4.OracleDbType = OracleDbType.Varchar2;
                parametro4.Value = ((EntSolicitud)entidad).CveActivo;
                parametro4.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro4);

                OracleParameter parametro5 = new OracleParameter();
                parametro5.OracleDbType = OracleDbType.Varchar2;
                parametro5.Value = "1";
                parametro5.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro5);

                OracleParameter parametro6 = new OracleParameter();
                parametro6.OracleDbType = OracleDbType.Varchar2;
                parametro6.Value = ((EntSolicitud)entidad).CveSolicitante;
                parametro6.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro6);

                OracleParameter parametro7 = new OracleParameter();
                parametro7.OracleDbType = OracleDbType.Varchar2;
                parametro7.Value = ((EntSolicitud)entidad).CveEstatus;
                parametro7.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro7);

                OracleParameter parametro8 = new OracleParameter();
                parametro8.OracleDbType = OracleDbType.Varchar2;
                parametro8.Value = ((EntSolicitud)entidad).Comentario;
                parametro8.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro8);

                //Autorizo
                OracleParameter parametro9 = new OracleParameter();
                parametro9.OracleDbType = OracleDbType.Varchar2;
                parametro9.Value = ((EntSolicitud)entidad).NombreSolicitante;
                parametro9.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro9);

                OracleParameter parametro10 = new OracleParameter();
                parametro10.OracleDbType = OracleDbType.Varchar2;
                parametro10.Value = (((EntSolicitud)entidad).NumeroNotaTurno == string.Empty) ? null : ((EntSolicitud)entidad).NumeroNotaTurno;
                parametro10.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro10);

                OracleParameter parametro11 = new OracleParameter();
                parametro11.OracleDbType = OracleDbType.Varchar2;
                parametro11.Value = (((EntSolicitud)entidad).FechaNota == string.Empty) ? null : ((EntSolicitud)entidad).FechaNota;
                parametro11.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro11);

                OracleParameter parametro12 = new OracleParameter();
                parametro12.OracleDbType = OracleDbType.Varchar2;
                parametro12.Value = ((EntSolicitud)entidad).UsuarioMtto;
                parametro12.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro12);

                OracleParameter parametro13 = new OracleParameter();
                parametro13.OracleDbType = OracleDbType.Varchar2;
                parametro13.Value = ((EntSolicitud)entidad).FilePlanos;
                parametro13.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro13);

                OracleParameter parametro14 = new OracleParameter();
                parametro14.OracleDbType = OracleDbType.Varchar2;
                parametro14.Value = ((EntSolicitud)entidad).FileDatosPresupuestales;
                parametro14.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro14);

                comando.ExecuteNonQuery();

                this.CveSolicitud = int.Parse(comando.Parameters[0].Value.ToString());

                if (((EntSolicitud)entidad).Jefes != null)
                {
                    String[] Jefes = ((EntSolicitud)entidad).Jefes.Split('|');

                    for (int i = 0; i <= Jefes.Count() - 1; i++)
                    {
                        PerTurnarJefeArea perTurnarJefeArea = new PerTurnarJefeArea();
                        perTurnarJefeArea.Insertar(new EntTurnarJefeArea() { CveSolicitud = int.Parse(comando.Parameters[0].Value.ToString()), CveUsuario = int.Parse(Jefes[i].ToString()) });
                    }
                }

                PerSolicitudSeguimiento perSolicitudSeguimiento = null;
                if (((EntSolicitud)entidad).ListaComentarios != null && ((EntSolicitud)entidad).ListaComentarios.Count > 0)
                {
                    foreach (EntSolicitudSeguimiento elemento in ((EntSolicitud)entidad).ListaComentarios)
                    {
                        perSolicitudSeguimiento = new PerSolicitudSeguimiento();
                        if (elemento.Accion == "nuevo")
                        {
                            elemento.CveSolicitud = int.Parse(comando.Parameters[0].Value.ToString());
                            perSolicitudSeguimiento.Insertar(elemento);
                        }
                        else if (elemento.Accion == "eliminar")
                            perSolicitudSeguimiento.Eliminar(elemento);
                    }
                }

                PerSolicitudArchivos perSolicitudArchivos = null;
                if (((EntSolicitud)entidad).ListaArchivos != null && ((EntSolicitud)entidad).ListaArchivos.Count > 0)
                {
                    foreach (EntSolicitudArchivos elemento in ((EntSolicitud)entidad).ListaArchivos)
                    {
                        perSolicitudArchivos = new PerSolicitudArchivos();
                        if (elemento.Accion == "nuevo")
                        {
                            elemento.CveSolicitud = int.Parse(comando.Parameters[0].Value.ToString());
                            perSolicitudArchivos.Insertar(elemento);
                        }
                        else if (elemento.Accion == "eliminar")
                            perSolicitudArchivos.Eliminar(elemento);
                    }
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerSolicitud.Insertar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerSolicitud.Insertar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }

        public void Actualizar(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PKG_SOLICITUD.updateSolicitud", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro0 = new OracleParameter();
                parametro0.OracleDbType = OracleDbType.Int32;
                parametro0.Value = ((EntSolicitud)entidad).CveSolicitud;
                parametro0.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro0);

                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = string.Empty;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Varchar2;
                parametro2.Value = ((EntSolicitud)entidad).FechaOficio;
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);

                OracleParameter parametro3 = new OracleParameter();
                parametro3.OracleDbType = OracleDbType.Varchar2;
                parametro3.Value = ((EntSolicitud)entidad).NoOficio;
                parametro3.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro3);

                OracleParameter parametro4 = new OracleParameter();
                parametro4.OracleDbType = OracleDbType.Varchar2;
                parametro4.Value = ((EntSolicitud)entidad).CveActivo;
                parametro4.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro4);

                OracleParameter parametro5 = new OracleParameter();
                parametro5.OracleDbType = OracleDbType.Varchar2;
                parametro5.Value = "1";
                parametro5.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro5);

                OracleParameter parametro6 = new OracleParameter();
                parametro6.OracleDbType = OracleDbType.Varchar2;
                parametro6.Value = ((EntSolicitud)entidad).CveSolicitante;
                parametro6.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro6);

                OracleParameter parametro7 = new OracleParameter();
                parametro7.OracleDbType = OracleDbType.Varchar2;
                parametro7.Value = ((EntSolicitud)entidad).CveEstatus;
                parametro7.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro7);

                OracleParameter parametro8 = new OracleParameter();
                parametro8.OracleDbType = OracleDbType.Varchar2;
                parametro8.Value = ((EntSolicitud)entidad).Comentario;
                parametro8.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro8);

                //Autorizo
                OracleParameter parametro9 = new OracleParameter();
                parametro9.OracleDbType = OracleDbType.Varchar2;
                parametro9.Value = ((EntSolicitud)entidad).NombreSolicitante;
                parametro9.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro9);

                OracleParameter parametro10 = new OracleParameter();
                parametro10.OracleDbType = OracleDbType.Varchar2;
                parametro10.Value = ((EntSolicitud)entidad).NumeroNotaTurno;
                parametro10.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro10);

                OracleParameter parametro11 = new OracleParameter();
                parametro11.OracleDbType = OracleDbType.Varchar2;
                parametro11.Value = ((EntSolicitud)entidad).FechaNota;
                parametro11.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro11);

                OracleParameter parametro13 = new OracleParameter();
                parametro13.OracleDbType = OracleDbType.Varchar2;
                parametro13.Value = ((EntSolicitud)entidad).FilePlanos;
                parametro13.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro13);

                OracleParameter parametro14 = new OracleParameter();
                parametro14.OracleDbType = OracleDbType.Varchar2;
                parametro14.Value = ((EntSolicitud)entidad).FileDatosPresupuestales;
                parametro14.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro14);

                comando.ExecuteNonQuery();

                this.CveSolicitud = int.Parse(comando.Parameters[0].Value.ToString());

                if (((EntSolicitud)entidad).Jefes != null)
                {
                    String[] Jefes = ((EntSolicitud)entidad).Jefes.Split('|');

                    for (int i = 0; i <= Jefes.Count() - 1; i++)
                    {
                        PerTurnarJefeArea perTurnarJefeArea = new PerTurnarJefeArea();
                        perTurnarJefeArea.Insertar(new EntTurnarJefeArea() { CveSolicitud = ((EntSolicitud)entidad).CveSolicitud, CveUsuario = int.Parse(Jefes[i].ToString()) });
                    }
                }

                PerSolicitudSeguimiento perSolicitudSeguimiento = null;
                if (((EntSolicitud)entidad).ListaComentarios != null && ((EntSolicitud)entidad).ListaComentarios.Count > 0)
                {
                    foreach (EntSolicitudSeguimiento elemento in ((EntSolicitud)entidad).ListaComentarios)
                    {
                        perSolicitudSeguimiento = new PerSolicitudSeguimiento();
                        if (elemento.Accion == "nuevo")
                            perSolicitudSeguimiento.Insertar(elemento);
                        else if (elemento.Accion == "eliminar")
                            perSolicitudSeguimiento.Eliminar(elemento);
                    }
                }

                PerSolicitudArchivos perSolicitudArchivos = null;
                if (((EntSolicitud)entidad).ListaArchivos != null && ((EntSolicitud)entidad).ListaArchivos.Count > 0)
                {
                    foreach (EntSolicitudArchivos elemento in ((EntSolicitud)entidad).ListaArchivos)
                    {
                        perSolicitudArchivos = new PerSolicitudArchivos();
                        if (elemento.Accion == "nuevo")
                            perSolicitudArchivos.Insertar(elemento);
                        else if (elemento.Accion == "eliminar")
                            perSolicitudArchivos.Eliminar(elemento);
                    }
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerSolicitud.Actualizar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerSolicitud.Actualizar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }

        public void Eliminar(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            conexion.Open();

            comando = new OracleCommand("PKG_SOLICITUD.eliminarSolicitud", conexion);
            comando.CommandType = System.Data.CommandType.StoredProcedure;

            try
            {
                OracleParameter parametro0 = new OracleParameter();
                parametro0.OracleDbType = OracleDbType.Varchar2;
                parametro0.Value = ((EntSolicitud)entidad).CveSolicitud;
                parametro0.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro0);

                comando.ExecuteNonQuery();

            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerSolicitud.Eliminar";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje:  " + exc.Message);
                excepcion.Source = "PerSolicitud.Eliminar";
                throw excepcion;
            }
            finally
            {
                comando = null;
                if (conexion != null)
                    if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
            }
        }

        public Entidades.General.IEntidad Obtener(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntSolicitud ent = null;

            try
            {
                comando = new OracleCommand("PKG_SOLICITUD.obtenerSolicitud", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = ((EntSolicitud)entidad).CveSolicitud;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);


                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                while (lector.Read())
                {
                    ent = new EntSolicitud();
                    ent.CveSolicitud = int.Parse(lector["Cve_Solicitud"] == DBNull.Value ? "0" : lector["Cve_Solicitud"].ToString());
                    ent.CveSolicitudPadre = int.Parse(lector["cve_solicitud_padre"] == DBNull.Value ? "0" : lector["cve_solicitud_padre"].ToString());

                    ent.FechaOficio = lector["fecha_oficio"].ToString();
                    ent.NoOficio = lector["no_oficio"].ToString();
                    ent.Fecha = lector["fecha"].ToString();
                    ent.CveActivo = int.Parse(lector["cve_activo"] == DBNull.Value ? "0" : lector["cve_activo"].ToString());

                    ent.Activo = lector["activo"].ToString();
                    ent.CveTipoSolicitud = int.Parse(lector["cve_tipo_solicitud"] == DBNull.Value ? "0" : lector["cve_tipo_solicitud"].ToString());
                    ent.TipoSolicitud = lector["tipo_solicitud"].ToString();

                    ent.CveSolicitante = int.Parse(lector["cve_solicitante"] == DBNull.Value ? "0" : lector["cve_solicitante"].ToString());
                    ent.Area = lector["area"].ToString();

                    ent.CveEstatus = int.Parse(lector["cve_estatus"] == DBNull.Value ? "0" : lector["cve_estatus"].ToString());
                    ent.Estatus = lector["estatus"].ToString();

                    ent.Comentario = lector["comentario"].ToString();

                    ent.NombreSolicitante = lector["nombre_solicitante"].ToString();
                    ent.NumeroNotaTurno = lector["numero_nota_turno"].ToString();
                    ent.FechaRegistro = lector["fecha_registro"].ToString();
                    ent.FechaNota = lector["fecha_nota"].ToString();

                    ent.Jefes = lector["jefes"].ToString();
                    ent.FilePlanos = lector["FILE_PLANOS"].ToString();
                    ent.FileDatosPresupuestales = lector["FILE_PRESUPUESTALES"].ToString();
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerUsuario.Obtener";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerUsuario.Obtener";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }
            return ent;
        }

        public List<Entidades.General.IEntidad> ObtenerTodos(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos()
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> CriteriosObtenerTodos(string FechaOficio, string NoOficio, string CveActivo, string CveSolicitante, string CveEstatus, string cve_usuario,string cve_rol)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntSolicitud ent = null;
            List<Entidades.General.IEntidad> lista = new List<Entidades.General.IEntidad>();

            try
            {
                comando = new OracleCommand("PKG_SOLICITUD.criteriosSolicitud", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = FechaOficio;
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Varchar2;
                parametro2.Value = NoOficio;
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);

                OracleParameter parametro3 = new OracleParameter();
                parametro3.OracleDbType = OracleDbType.Varchar2;
                parametro3.Value = CveActivo;
                parametro3.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro3);

                OracleParameter parametro4 = new OracleParameter();
                parametro4.OracleDbType = OracleDbType.Varchar2;
                parametro4.Value = CveSolicitante;
                parametro4.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro4);

                OracleParameter parametro5 = new OracleParameter();
                parametro5.OracleDbType = OracleDbType.Varchar2;
                parametro5.Value = CveEstatus;
                parametro5.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro5);

                OracleParameter parametro6 = new OracleParameter();
                parametro6.OracleDbType = OracleDbType.Varchar2;
                parametro6.Value = null;
                parametro6.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro6);

                OracleParameter parametro7 = new OracleParameter();
                parametro7.OracleDbType = OracleDbType.Varchar2;
                parametro7.Value = null;
                parametro7.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro7);

                OracleParameter parametro8 = new OracleParameter();
                parametro8.OracleDbType = OracleDbType.Varchar2;
                parametro8.Value = cve_usuario;
                parametro8.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro8);
                
                OracleParameter parametro9 = new OracleParameter();
                parametro9.OracleDbType = OracleDbType.Varchar2;
                parametro9.Value = cve_rol;
                parametro9.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro9);
                

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                while (lector.Read())
                {
                    ent = new EntSolicitud();
                    ent.CveSolicitud = int.Parse(lector["Cve_Solicitud"] == DBNull.Value ? "0" : lector["Cve_Solicitud"].ToString());
                    ent.NoOficio = lector["No_Oficio"].ToString();
                    ent.FechaOficio = lector["Fecha_Oficio"].ToString();
                    ent.Area = lector["Area"].ToString();
                    ent.Activo = lector["Activo"].ToString();
                    ent.Comentario = lector["Comentario"].ToString();
                    ent.TotalObras = lector["Total_Obras"].ToString();
                    ent.UsuarioMtto = lector["CVE_USUARIO_MTTO"].ToString();
                    ent.FilePlanos = lector["FILE_PLANOS"].ToString();
                    ent.FileDatosPresupuestales = lector["FILE_PRESUPUESTALES"].ToString();
                    lista.Add(ent);
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerUsuario.CriteriosObtenerTodos";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerUsuario.CriteriosObtenerTodos";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }
            return lista;
        }


        #endregion
    }
}
